로딩 중이에요... 🐣
[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
2 05 STATIC FILES (정적 파일) | ✅ 저자: 이유정(박사)
🔹 정적 파일이란? 웹 페이지의 디자인을 담당하는 HTML, CSS, JavaScript, 이미지 파일 등을 의미합니다.
◽ 설정 파일(settings.py) 확인
INSTALLED_APPS
에 staticfiles 앱 추가 Django가 정적 파일을 처리할 수 있도록 하기 위해INSTALLED_APPS
안에 아래 항목이 반드시 있어야 합니다:
INSTALLED_APPS = [
# 기본 앱들...
'django.contrib.staticfiles', # 정적 파일을 위한 기본 앱
]
STATIC_URL
설정 브라우저에서 정적 파일을 불러올 때 사용할 URL prefix를 지정합니다. 보통 다음과 같이 설정합니다:
STATIC_URL = '/static/'
예를 들어, static/css/style.css
파일이 있다면 실제 접근 URL은:
http://localhost:8000/static/css/style.css
- 개발 중 정적 파일 위치 지정 (
STATICFILES_DIRS
) 개발할 때 사용하는 정적 파일들의 경로를 지정합니다. 일반적으로 프로젝트 루트의static
폴더를 지정합니다:
import os
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
프로젝트 루트
프로젝트 루트/
├── manage.py
├── db.sqlite3
├── mysite/
│ ├── __init__.py
│ ├── settings.py ← 여기에 BASE_DIR 선언됨
│ ├── urls.py
│ ├── views.py
BASE_DIR
는 보통settings.py
맨 위에서 다음과 같이 정의되어 있습니다:
BASE_DIR = Path(__file__).resolve().parent.parent
mysite/mysite
구조일 경우
프로젝트 루트/
└── mysite/
├── manage.py
├── mysite/
│ ├── settings.py
│ ├── urls.py
이런 구조에서는 settings.py
는 실제로 mysite/mysite/settings.py
에 위치하므로:
BASE_DIR = Path(__file__).resolve().parent.parent.parent
- 배포 시 사용하는 정적 파일 수집 위치 (
STATIC_ROOT
) 배포(운영) 환경에서는collectstatic
명령어를 통해 모든 정적 파일을 한 곳으로 모읍니다. 이때 사용할 폴더 경로를 지정합니다:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
배포할 때 다음 명령을 사용하여 파일들을 STATIC_ROOT로 복사합니다:
python manage.py collectstatic
📁 정리된 디렉토리 구조 예시
mysite/
├── manage.py
├── static/ ← 개발 중 사용하는 정적 파일 폴더
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│ └── images/
│ └── logo.png
├── staticfiles/ ← 배포 시 collectstatic으로 모이는 폴더(자동 생성)
├── mysite/
│ ├── __init__.py
│ ├── settings.py ← STATIC_URL,STATICFILES_DIRS,STATIC_ROOT 설정
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
└── polls/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
✅ settings.py
예시 코드
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
# 정적 파일 URL 경로
STATIC_URL = '/static/'
# 개발용 정적 파일 경로
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# 배포용 정적 파일 모음 경로
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
✨ 정리:
static/
폴더는 개발 중 수동으로 생성하여 CSS, JS, 이미지 등을 보관합니다.staticfiles/
는collectstatic
명령으로 생성되는 폴더입니다 (직접 만들지 않아도 됨).polls
앱 안에static/polls/
폴더를 만들어 앱별 정적 파일을 둘 수도 있고 전체 통일해서 관리해도 됩니다.
① 앱별로 static 폴더를 나누는 방식:
mysite/
├── manage.py
├── mysite/
│ └── settings.py
├── polls/
│ ├── static/
│ │ └── polls/
│ │ ├── css/
│ │ │ └── style.css
│ │ └── images/
│ │ └── logo.png
│ └── views.py
템플릿에서 사용할 때:
{% load static %}
<link rel="stylesheet" href="{% static 'polls/css/style.css' %}">
- 앱 단위로 정적 파일이 독립되어 관리가 깔끔함
- 앱을 재사용하거나 분리할 때 유리
② 프로젝트 전체에서 통합 관리하는 방식
mysite/static/
폴더를 만들어, 모든 앱의 정적 파일을 한곳에서 관리합니다.
mysite/
├── manage.py
├── mysite/
│ ├── settings.py
│ └── urls.py
├── static/
│ ├── css/
│ │ └── style.css
│ └── images/
│ └── logo.png
├── polls/
│ └── views.py
템플릿에서 사용할 때:
{% load static %}
<link rel="stylesheet" href="{% static 'css/style.css' %}">
- 구조가 단순하고 직관적
- 소규모 프로젝트나 단일 앱일 경우 관리가 더 편리함